#pragma once
#ifndef _FEM_TRIANGLE_ELEMENT_
#define _FEM_TRIANGLE_ELEMENT_

//================================================================================================================================
//================================================================================================================================
// QtCore
#include <QtCore/QVector>
// Локальные
#include "core_global.h"

//================================================================================================================================
//================================================================================================================================
namespace fem
{
    /// Треугольный конечный элемент.
    //
    /// Описывается индексами точек, являющимися вершинами КЭ, в массиве точек расчётной области, и индексом материала, соответствующего КЭ.
    class CORE_EXPORT TriangleElement
    {
    public:
        /// Создание нового треугольного КЭ с вершинами в точках \e point1, \e point2 и \e point3.
        TriangleElement(int point1, int point2, int point3, int material) : m_Material(material)
        {
            m_Points[0] = point1;
            m_Points[1] = point2;
            m_Points[2] = point3;
        }

        /// Функция возврощает индекс материала, соответствующего конечному элементу.
        int material() const {return m_Material;}

        /// Функция позволяет узнать глобальный номер точки(номер точки во всем наборе точек расчетной области) по локальному
        /// номеру точки (номер точки в наборе точек, являющихся вершинами КЭ).
        int point(int index) const
        {
            Q_ASSERT_X(index >= 0 && index <= 2, "TriangleElement::point", "index is out of range");
            return m_Points[index];
        }

    private:
        int m_Material;     ///< Идентификатор материала, соответствующего КЭ.
        int m_Points[3];    ///< Список индексов точек расчетной области, являющихся вершинами КЭ.
    };
}

#endif // _FEM_TRIANGLE_ELEMENT_
